﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SegIdenPC.Utilitarios;
using SegIdenPC.Entidad;
using log4net;
using System.Globalization;
using System.Configuration;
using GS1.Utilitario;
using SegIdenPC.Herramientas;
using SegIdenPC.Helper;

namespace SegIdenPC.Formularios
{
    public partial class frmAlertaCorreo : Form
    {
        #region --- Variables y Propiedades ---
        private static readonly ILog log = LogManager.GetLogger(typeof(frmAlertaCorreo));

        private const string TITULO = "Alerta de préstamos";
        private const string FORMATO_TOTAL_ENCONTRADOS = "Total productos encontrados: {0}";
     
        private String sFechaHoraActual = "";

        private DateTime dtFechaHora;

        private Prestamo prestamoActual = null;
        private Cliente clienteActual = null;
        private ListaPrestamo listaPrestamo = null;
        private ListaTienda listaTienda = null;

        #endregion

        #region --- Constructor ---
        public frmAlertaCorreo()
        {
            InitializeComponent();
        }
        #endregion

        #region --- Eventos Formulario ---
        private void frmAlertaCorreo_Load(object sender, EventArgs e)
        {
            cargarFormulario();
        }
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            buscarPrestamos();
        }
        private void btnEnviarTodos_Click(object sender, EventArgs e)
        {
            enviarCorreo();
        }
        #endregion

        #region --- Metodos Propios ---

        private void cargarFormulario()
        {

            try
            {
                Cursor.Current = Cursors.WaitCursor;

                obtenerFechaHoraActual();

                dtFechaHora = DateTime.ParseExact(sFechaHoraActual, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

                //Instanciando y creando listado de tienda
                listaTienda = new ListaTienda();

                // Estableciendo a 0 el texto del total de registros encontrados.
                this.lblTotalRegistros.Text = string.Format(FORMATO_TOTAL_ENCONTRADOS, 0);

                //Estableciendo lista de tiendas
                cargarTiendas();

                // Estableciendo focus

                this.cboCriterio.Focus();

                this.btnEnviarTodos.Enabled = false;

            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                Libreria.MensajeError(ex, TITULO);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }

        }

        private void cargarTiendas()
        {
            Operacion operacion = null;
            string contenidoXML = string.Empty;

            // Estableciendo operacion a ser enviada al Servicio REST
            operacion = new Operacion();
            operacion.numero = Constantes.OPERACION_LISTAR_TIENDAS;

            operacion.tienda = new Tienda();
            operacion.tienda.nombre = "%";
            operacion.tienda.estado = Constantes.ESTADO_CODIGO_ACTIVO;

            // Instanciando y ejecutando llamada al ServicioREST
            ConexionREST conexionREST = new ConexionREST();
            contenidoXML = conexionREST.ejecutarOperacion(operacion);

            // Obteniendo Objeto de Error
            OperacionError operacionError = contenidoXML.DeserializarTo<OperacionError>();

            // Validar si hay error
            if (operacionError != null)
            {
                Libreria.ShowMessageboxError(operacionError.descripcion);
                return;
            }

            // Obteniendo Objeto de ListaTienda
            this.listaTienda = contenidoXML.DeserializarTo<ListaTienda>();

            // Estableciendo listado de Tienda
            this.cboCriterio.DataSource = this.listaTienda.lista;
            this.cboCriterio.ValueMember = "codigo";
            this.cboCriterio.DisplayMember = "nombre";
            this.cboCriterio.SelectedIndex = 0;

            // Creando listado para registro de Tienda
            ListaTienda listaTiendaNueva = new ListaTienda();

            foreach (Tienda tienda in this.listaTienda.lista)
            {
                listaTiendaNueva.add(new Tienda { codigo = tienda.codigo, nombre = tienda.nombre });
            }

        }
        private void buscarPrestamos()
        {
            try
            {
                Operacion operacion = null;
                string contenidoXML = string.Empty;

                // Estableciendo operacion a ser enviada al Servicio REST
                operacion = new Operacion();
                operacion.numero = Constantes.OPERACION_LISTAR_PRESTAMOS;

                operacion.prestamo = new Prestamo();
                operacion.prestamo.tienda = new Tienda();
                operacion.prestamo.tienda.codigo = this.cboCriterio.SelectedValue.ToString();
                operacion.prestamo.cliente = new Cliente();
                operacion.prestamo.cliente.codCliente = "0";
                operacion.prestamo.estado = Constantes.ESTADO_DOCUMENTO_DESPACHADO;

                // Instanciando y ejecutando llamada al ServicioREST
                ConexionREST conexionREST = new ConexionREST();
                contenidoXML = conexionREST.ejecutarOperacion(operacion);

                // Obteniendo Objeto de Error
                OperacionError operacionError = contenidoXML.DeserializarTo<OperacionError>();

                // Validar si hay error
                if (operacionError != null)
                {
                    Libreria.ShowMessageboxError(operacionError.descripcion);
                    return;
                }

                // Obteniendo Objeto de la lista de solicitudes pendientes de autorizacion
                this.listaPrestamo = contenidoXML.DeserializarTo<ListaPrestamo>();

                // Mostrar el total de registros encontrados
                this.lblTotalRegistros.Text = string.Format(FORMATO_TOTAL_ENCONTRADOS, listaPrestamo.lista.Count);

                // Se establece propiedad para evitar que genere nuevas columnas que no estan mapeadas en la grilla
                this.dgvListado.AutoGenerateColumns = false;

                // Se establece la fuente de datos de la grilla
                this.dgvListado.DataSource = listaPrestamo.lista;

                // Colorear grilla deacuerdo a criterios
                pintarGrilla(dgvListado);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                Libreria.MensajeError(ex, TITULO);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }


        private void pintarGrilla(DataGridView grilla)
        {
            ListPersonalizada<Prestamo> listaPrestamo = null;
            listaPrestamo = (ListPersonalizada<Prestamo>)grilla.DataSource;

            if (listaPrestamo != null)
            {
                for (int i = 0; i < listaPrestamo.Count; i++)
                {
                    Prestamo prestamo = listaPrestamo[i];

                    grilla.Rows[i].Cells[0].Value = prestamo.codPrestamo;
                    grilla.Rows[i].Cells[1].Value = prestamo.cliente.razonSocial;
                    grilla.Rows[i].Cells[2].Value = Convert.ToDateTime(prestamo.fechaFin).ToString(Constantes.FORMATO_FECHA);
                    switch (prestamo.estado)
                    {

                        case Constantes.ESTADO_DOCUMENTO_DESPACHADO:
                            {
                                grilla.Rows[i].Cells[3].Value = Constantes.ESTADO_DOCUMENTO_DESCRIPCION_DESPACHADO;
                                break;
                            }
                        case Constantes.ESTADO_DOCUMENTO_DEVUELTO:
                            {
                                grilla.Rows[i].Cells[3].Value = Constantes.ESTADO_DOCUMENTO_DESCRIPCION_DEVUELTO;
                                break;
                            }
                        case Constantes.ESTADO_DOCUMENTO_IMPRESO:
                            {
                                grilla.Rows[i].Cells[3].Value = Constantes.ESTADO_DOCUMENTO_DESCRIPCION_IMPRESO;
                                break;
                            }
                        case Constantes.ESTADO_DOCUMENTO_PARCIAL:
                            {
                                grilla.Rows[i].Cells[3].Value = Constantes.ESTADO_DOCUMENTO_DESCRIPCION_PARCIAL;
                                break;
                            }
                        case Constantes.ESTADO_DOCUMENTO_PENDIENTE:
                            {
                                grilla.Rows[i].Cells[3].Value = Constantes.ESTADO_DOCUMENTO_DESCRIPCION_PENDIENTE;
                                break;
                            }
                        case Constantes.ESTADO_DOCUMENTO_RECEPCIONADO:
                            {
                                grilla.Rows[i].Cells[3].Value = Constantes.ESTADO_DOCUMENTO_DESCRIPCION_RECEPCIONADO;
                                break;
                            }
                        case Constantes.ESTADO_DOCUMENTO_AUTORIZADO:
                            {
                                grilla.Rows[i].Cells[3].Value = Constantes.ESTADO_DOCUMENTO_DESCRIPCION_AUTORIZADO;
                                break;
                            }
                    }

                    //Pregunta si la fecha fin ya ha llegado
                    DateTime dtFechaFin = DateTime.ParseExact(prestamo.fechaFin, "yyyy-MM-dd", CultureInfo.InvariantCulture);

                    if (dtFechaHora.CompareTo(dtFechaFin) > 0)
                    {
                        this.dgvListado.Rows[i].DefaultCellStyle.BackColor = Color.FromArgb(255, 128, 128);

                        this.btnEnviarTodos.Enabled = true;
                        
                    }
   
                }
            }
        }

        private void enviarCorreo()
        {
            if (this.listaPrestamo.lista == null)
            {
                Libreria.ShowMessageboxInfo("Seleccione una tienda determinada", TITULO);
 
            }

                foreach (Prestamo prestamo in this.listaPrestamo.lista)
                {
                    //Pregunta si la fecha fin ya ha llegado
                    DateTime dtFechaFin = DateTime.ParseExact(prestamo.fechaFin, "yyyy-MM-dd", CultureInfo.InvariantCulture);

                    if (dtFechaHora.CompareTo(dtFechaFin) > 0)
                    {
                        Prestamo prestamoCliente = new Prestamo();
                        prestamoCliente = obtenerPrestamo(prestamo);

                        //Obtiene datos de los productos que estan prestados
                        //String ListaItem = "";
                        String ListaItem = "";
                        //prestamo.estado = Constantes.ESTADO_DOCUMENTO_DESPACHADO; //RECEPCIONADO

                        foreach (Item item in prestamoCliente.listaItem.lista)
                        {
                            Item itemLeido = obtenerItem(item);
                            if (!item.estado.Equals(Constantes.ESTADO_ITEM_DISPONIBLE))
                            {

                            ListaItem = itemLeido.producto.codProductoProveedor + " - " +
                                        itemLeido.producto.descripcion + " | " + ListaItem;
                            }
                            //cambiar el estado de los items a Disponible
                            //item.estado = 
                        }

                        //Actualizar prestamo
                        //actualizarPrestamo(separacion);

                        //obtiene datos para el correo
                        CorreoModulo correoModuloConsulta = new CorreoModulo();
                        correoModuloConsulta.modulo = new Modulo();
                        correoModuloConsulta.modulo.codigo = Constantes.CODIGO_MODULO_MOVIL_PRESTAMOS;

                        ListaCorreoModulo listaCorreoModuloObtenido = listarCorreoModulo(correoModuloConsulta);

                        //Se preparan los correos para enviar dependiendo de los casos que se den
                        foreach (CorreoModulo correoModuloEnviar in listaCorreoModuloObtenido.lista)
                        {
                             String tituloCorreo = correoModuloEnviar.textoTitulo;
                             String NombreCliente = "";
                          

                            ListaUsuario listaCorreos = new ListaUsuario();

                            //Pregunta si hay que enviarlo al cliente y obtiene datos del cliente
                            if (correoModuloEnviar.indEnviarCliente.Equals(Constantes.SI))
                            {
                                Cliente cliente = clientePrestamo(prestamo.cliente);
                                //CuerpoMensajeEnviado = correoModuloEnviar.textoMensaje + " " + cliente.razonSocial;System.Environment.NewLine
                                NombreCliente = cliente.razonSocial;

                                //Consulta en la lista donde están los contactos
                                foreach (ContactoCliente contacto in cliente.listaContactoCliente.lista)
                                {
                                    //consulta si alguno ha autorizado a enviar un mail
                                    if (contacto.indenvioemail.Equals(Constantes.SI))
                                    {
                                        Usuario email = new Usuario();
                                        email.email = contacto.email;
                                        email.nombresyApellidos = contacto.nombresyApellidos;
                                        listaCorreos.add(email);
                                    }
                                }
                            }
                            //Pregunta si hay que enviarlo a la vendedora y obtiene datos de la vendedora
                            if (correoModuloEnviar.indEnviarUsuario.Equals(Constantes.SI))
                            {
                                Usuario usuarioPrestamo = obtenerUsuario(prestamo.usuario);
                                listaCorreos.add(usuarioPrestamo);
                            }
                            //Pregunta si hay que enviarlo a la administración y obtiene datos de la administracion
                            if (correoModuloEnviar.indEnviarAdministrador.Equals(Constantes.SI))
                            {
                                Usuario usuarioConsulta = new Usuario();
                                usuarioConsulta.rol = new Rol();
                                //Rol de Administrador
                                usuarioConsulta.rol.codigo = "1";
                                ListaUsuario listaUsuarioCorreo = listaUsuarioObtenido(usuarioConsulta);

                                foreach (Usuario Administradores in listaUsuarioCorreo.lista)
                                {
                                    listaCorreos.add(Administradores);
                                }
                            }
                            //Pregunta si hay que enviarlo al correo del Usuario principal y obtiene sus datos
                            if (correoModuloEnviar.indEnviarUsuarioPrincipal.Equals(Constantes.SI))
                            {
                                //Usuario principal tiene código 3
                                Usuario email = obtenerUsuario(new Usuario() { codUsuario = "3" });
                                listaCorreos.add(email);
                            }

                            //Prepara email
                            //CuerpoMensajeEnviado = CuerpoMensajeEnviado + ListaItem + System.Environment.NewLine + correoModuloEnviar.textoMensajeAdicional;
                        

                            // Ejecutar envio de mail de notificacion
                            EmailHelper.enviarNotificacion(tituloCorreo, listaCorreos, NombreCliente, ListaItem);
                        }

                        //Se aumenta el periodo de días
                        actualizarPrestamo(prestamo);
                    }
                }

                Libreria.ShowMessageboxInfo("Correos enviados correctamente", TITULO);
                pintarGrilla(dgvListado);
                this.btnEnviarTodos.Enabled = false;
            }

        #region --- Metodos Correo ---

        private ListaUsuario listaUsuarioObtenido(Usuario usuario)
        {
            Operacion operacion = null;
             ListaUsuario listaUsuarioObtenido = null;
            string contenidoXML = string.Empty;

            // Estableciendo operacion a ser enviada al Servicio REST
            operacion = new Operacion();
            operacion.numero = Constantes.OPERACION_LISTAR_USUARIOS;

            operacion.usuario = new Usuario();
            operacion.usuario = usuario;

            // Instanciando y ejecutando llamada al ServicioREST
            ConexionREST conexionREST = new ConexionREST();
            contenidoXML = conexionREST.ejecutarOperacion(operacion);

            // Obteniendo Objeto de Error
            OperacionError operacionError = contenidoXML.DeserializarTo<OperacionError>();

            // Validar si hay error
            if (operacionError != null)
            {
                Libreria.ShowMessageboxError(operacionError.descripcion);
                return listaUsuarioObtenido;
            }

            // Obteniendo Objeto de Nivel
            listaUsuarioObtenido = contenidoXML.DeserializarTo<ListaUsuario>();

            return listaUsuarioObtenido;
        }

        private Usuario obtenerUsuario(Usuario usuario)
        {
            Operacion operacion = null;
            string contenidoXML = string.Empty;

            // Estableciendo operacion a ser enviada al Servicio REST
            operacion = new Operacion();
            operacion.numero = Constantes.OPERACION_OBTENER_USUARIO;

            operacion.usuario = new Usuario();
            operacion.usuario = usuario;

            // Instanciando y ejecutando llamada al ServicioREST
            ConexionREST conexionREST = new ConexionREST();
            contenidoXML = conexionREST.ejecutarOperacion(operacion);

            // Obteniendo Objeto de Error
            OperacionError operacionError = contenidoXML.DeserializarTo<OperacionError>();

            // Validar si hay error
            if (operacionError != null)
            {
                Libreria.ShowMessageboxError(operacionError.descripcion);
                return usuario;
            }

            // Obteniendo Objeto de Nivel
            Usuario usuarioObtenido = contenidoXML.DeserializarTo<Usuario>();

            return usuarioObtenido;
        }

        private Cliente clientePrestamo(Cliente cliente)
        {
            Operacion operacion = null;
            string contenidoXML = string.Empty;

            // Estableciendo operacion a ser enviada al Servicio REST
            operacion = new Operacion();
            operacion.numero = Constantes.OPERACION_OBTENER_CLIENTE;

            operacion.cliente = new Cliente();
            operacion.cliente = cliente;

            // Instanciando y ejecutando llamada al ServicioREST
            ConexionREST conexionREST = new ConexionREST();
            contenidoXML = conexionREST.ejecutarOperacion(operacion);

            // Obteniendo Objeto de Error
            OperacionError operacionError = contenidoXML.DeserializarTo<OperacionError>();

            // Validar si hay error
            if (operacionError != null)
            {
                Libreria.ShowMessageboxError(operacionError.descripcion);
                return cliente;
            }

            // Obteniendo Objeto de Nivel
            Cliente clienteObtenido = contenidoXML.DeserializarTo<Cliente>();

            return clienteObtenido;
        }

        private ListaCorreoModulo listarCorreoModulo(CorreoModulo correoModulo)
        {
            Operacion operacion = null;
            ListaCorreoModulo listaCorreoModuloObtenido = null;
            string contenidoXML = string.Empty;

            // Estableciendo operacion a ser enviada al Servicio REST
            operacion = new Operacion();
            operacion.numero = Constantes.OPERACION_LISTAR_CORREO_MODULO;

            operacion.correoModulo = new CorreoModulo();
            operacion.correoModulo = correoModulo;

            // Instanciando y ejecutando llamada al ServicioREST
            ConexionREST conexionREST = new ConexionREST();
            contenidoXML = conexionREST.ejecutarOperacion(operacion);

            // Obteniendo Objeto de Error
            OperacionError operacionError = contenidoXML.DeserializarTo<OperacionError>();

            // Validar si hay error
            if (operacionError != null)
            {
                Libreria.ShowMessageboxError(operacionError.descripcion);
                return listaCorreoModuloObtenido;
            }

            // Obteniendo Objeto de Nivel
            listaCorreoModuloObtenido = contenidoXML.DeserializarTo<ListaCorreoModulo>();

            return listaCorreoModuloObtenido;
        }


        private Prestamo obtenerPrestamo(Prestamo prestamo)
        {
            Operacion operacion = null;
            string contenidoXML = string.Empty;

            // Estableciendo operacion a ser enviada al Servicio REST
            operacion = new Operacion();
            operacion.numero = Constantes.OPERACION_OBTENER_PRESTAMO;
            operacion.prestamo = new Prestamo();
            operacion.prestamo = prestamo;

            // Instanciando y ejecutando llamada al ServicioREST
            ConexionREST conexionREST = new ConexionREST();
            contenidoXML = conexionREST.ejecutarOperacion(operacion);

            // Obteniendo Objeto de Error
            OperacionError operacionError = contenidoXML.DeserializarTo<OperacionError>();

            // Validar si hay error
            if (operacionError != null)
            {
                Libreria.ShowMessageboxError(operacionError.descripcion);
                return prestamo;
            }

            // Obteniendo Objeto de Nivel
            prestamo = contenidoXML.DeserializarTo<Prestamo>();

            return prestamo;
        }
        private ListaPrestamo listarPrestamos(Prestamo prestamo)
        {
            Operacion operacion = null;
            ListaPrestamo listaPrestamoObtenido = null;
            string contenidoXML = string.Empty;

            // Estableciendo operacion a ser enviada al Servicio REST
            operacion = new Operacion();
            operacion.numero = Constantes.OPERACION_LISTAR_PRESTAMOS;

            //operacion.prestamo = new Prestamo();
            //operacion.prestamo.tienda = new Tienda();
           // operacion.prestamo.tienda.codigo = this.cboCriterio.SelectedValue.ToString();
           // operacion.prestamo.cliente = new Cliente();
           // operacion.prestamo.cliente.codCliente = "0";
           // operacion.prestamo.estado = Constantes.ESTADO_DOCUMENTO_DESPACHADO;

            operacion.prestamo = new Prestamo();
           operacion.prestamo = prestamo;

            // Instanciando y ejecutando llamada al ServicioREST
            ConexionREST conexionREST = new ConexionREST();
            contenidoXML = conexionREST.ejecutarOperacion(operacion);

            // Obteniendo Objeto de Error
            OperacionError operacionError = contenidoXML.DeserializarTo<OperacionError>();

            // Validar si hay error
            if (operacionError != null)
            {
                Libreria.ShowMessageboxError(operacionError.descripcion);
                return listaPrestamoObtenido;
            }

            // Obteniendo Objeto de Nivel
            listaPrestamoObtenido = contenidoXML.DeserializarTo<ListaPrestamo>();

            return listaPrestamoObtenido;
        }

        private Item obtenerItem(Item item)
        {
            Operacion operacion = null;
            string contenidoXML = string.Empty;

            // Estableciendo operacion a ser enviada al Servicio REST
            operacion = new Operacion();
            operacion.numero = Constantes.OPERACION_OBTENER_ITEM;
            operacion.item = item;

            // Instanciando y ejecutando llamada al ServicioREST
            ConexionREST conexionREST = new ConexionREST();
            contenidoXML = conexionREST.ejecutarOperacion(operacion);

            // Obteniendo Objeto de Error
            OperacionError operacionError = contenidoXML.DeserializarTo<OperacionError>();

            // Validar si hay error
            if (operacionError != null)
            {
                Libreria.ShowMessageboxError(operacionError.descripcion);
                return item;
            }

            // Obteniendo Objeto de Producto
            Item itemObtenido = contenidoXML.DeserializarTo<Item>();

            return itemObtenido;

        }

        private void obtenerFechaHoraActual()
        {
            Operacion operacion = null;
            
            string contenidoXML = string.Empty;

            // Estableciendo operacion a ser enviada al Servicio REST
            operacion = new Operacion();
            operacion.numero = Constantes.OPERACION_OBTENER_HORA_ACTUAL;

            // Instanciando y ejecutando llamada al ServicioREST
            ConexionREST conexionREST = new ConexionREST();
            contenidoXML = conexionREST.ejecutarOperacion(operacion);

            // Obteniendo Objeto de Error
            OperacionError operacionError = contenidoXML.DeserializarTo<OperacionError>();

            // Validar si hay error
            if (operacionError != null)
            {
                Libreria.ShowMessageboxError(operacionError.descripcion);
                sFechaHoraActual = DateTime.Now.ToString();
                return;
            }

            // Obteniendo Objeto de Nivel
            Parametro parametro = contenidoXML.DeserializarTo<Parametro>();

            switch (parametro.codigo)
            {
                case Constantes.CODIGO_PARAMETRO_FECHAHORASISTEMA:
                    sFechaHoraActual = parametro.valor;
                    break;
                default:
                    sFechaHoraActual = DateTime.Now.ToString();
                    break;
            }
            return;
        }

        private void actualizarPrestamo(Prestamo prestamo)
        {
            Operacion operacion = null;
            string contenidoXML = string.Empty;

            try
            {
                // Estableciendo operacion a ser enviada al Servicio REST
                operacion = new Operacion();
                operacion.numero = Constantes.OPERACION_ACTUALIZAR_PRESTAMO;

                //DateTime dtFechaMas = DateTime.ParseExact(prestamo.fechaFin, "yyyy-MM-dd", CultureInfo.InvariantCulture);
                DateTime dtFechaMas = DateTime.ParseExact(prestamo.fechaFin, Constantes.FORMATO_FECHAHORA , CultureInfo.InvariantCulture);
                dtFechaMas = dtFechaMas.AddDays(3);

                operacion.prestamo = new Prestamo();
                operacion.prestamo.periodoxDias = Convert.ToString(Convert.ToInt32(prestamo.periodoxDias)+ (3));
                operacion.prestamo.fechaFin = dtFechaMas.ToString(Constantes.FORMATO_FECHAHORA);
              //operacion.prestamo.fechaFin = dtFechaMas.ToShortDateString. ; // "yyyy-MM-dd" .Date.ToShortDateString;
                operacion.prestamo = prestamo;


                // Instanciando y ejecutando llamada al ServicioREST
                ConexionREST conexionREST = new ConexionREST();
                contenidoXML = conexionREST.ejecutarOperacion(operacion);

                // Obteniendo Objeto de Error
                OperacionError operacionError = contenidoXML.DeserializarTo<OperacionError>();

                // Validar si hay error
                if (operacionError != null)
                {
                    Libreria.ShowMessageboxError(operacionError.descripcion);
                    return;
                }

                OperacionResultado operacionResultado = contenidoXML.DeserializarTo<OperacionResultado>();

                if ((operacionResultado != null) &&
                    (operacionResultado.esOK.Equals(Constantes.SI)))
                {
                    //this.txtCodigo.Text = operacionResultado.codigoGenerado;
                }
                else
                {
                    Libreria.ShowMessageboxError("No se guardo los datos", TITULO);
                    return;
                }


            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                Libreria.MensajeError(ex, TITULO);
            }
        }

        #endregion

        private void button1_Click(object sender, EventArgs e)
        {

        }
        #endregion

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void lblTotalRegistros_Click(object sender, EventArgs e)
        {

        }

        /*  private void cargarFormulario()
       {
           if (ParametrosAplicacion.USUARIO_ACTUAL.rol.codigo.Equals(Constantes.CODIGO_ROL_ADMINISTRADOR))
           {

               //Cargar la fecha del día de hoy según sistema
               obtenerFechaHoraActual();

              // dtFechaHora = DateTime.ParseExact(sFechaHoraActual, "dd/mm/yyyy hh:mm:ss", CultureInfo.InvariantCulture);

               //---------------------------------------------------------
               //Atención de separaciones
               //Obtiene lista de separaciones
               ListaPrestamo listaSeparaciones = listarPrestamos(new Prestamo { estado = Constantes.ESTADO_DOCUMENTO_PENDIENTE });
               //revisa la lista
               foreach (Prestamo separacion in listaSeparaciones.lista)
               {
                   //Pregunta si la fecha fin ya ha llegado
                   DateTime dtFechaFin = DateTime.ParseExact(separacion.fechaFin, "yyyy-mm-dd", CultureInfo.InvariantCulture);

                   if (dtFechaHora.CompareTo(dtFechaFin) > 0)
                   {

                       //Obtiene datos de los productos que estan separados
                       String ListaItem = "";

                       separacion.estado = Constantes.ESTADO_DOCUMENTO_RECEPCIONADO;

                       foreach (Item item in separacion.listaItem.lista)
                       {
                           Item itemLeido = obtenerItem(item);
                           ListaItem = ListaItem + " " + itemLeido.producto.codProductoProveedor + " - " +
                                       itemLeido.producto.nivelProducto.descripcion + " - " +
                                       itemLeido.producto.nivelTipo.descripcion + " - " +
                                       itemLeido.producto.nivelMaterial.descripcion + " - " +
                                       itemLeido.producto.nivelColor.descripcion + " / ";

                           //cambiar el estado de los items a Disponible
                           item.estado = Constantes.ESTADO_ITEM_DISPONIBLE;
                       }

                       //Actualizar prestamo
                       actualizarPrestamo(separacion);

                       //obtiene datos para el correo
                       CorreoModulo correoModuloConsulta = new CorreoModulo();
                       correoModuloConsulta.modulo = new Modulo();
                       correoModuloConsulta.modulo.codigo = Constantes.CODIGO_MODULO_MOVIL_PRESTAMOS;

                       ListaCorreoModulo listaCorreoModuloObtenido = listarCorreoModulo(correoModuloConsulta);

                       //Se preparan los correos para enviar dependiendo de los casos que se den
                       foreach (CorreoModulo correoModuloEnviar in listaCorreoModuloObtenido.lista)
                       {
                           String tituloCorreo = correoModuloEnviar.textoTitulo;
                           String CuerpoMensajeEnviado = "";

                           ListaUsuario listaCorreos = new ListaUsuario();

                           //Pregunta si hay que enviarlo al cliente y obtiene datos del cliente
                           if (correoModuloEnviar.indEnviarCliente.Equals(Constantes.SI))
                           {
                               Cliente cliente = clientePrestamo(separacion.cliente);
                               CuerpoMensajeEnviado = correoModuloEnviar.textoMensaje + " " + cliente.razonSocial;
                               //Consulta en la lista donde están los contactos
                               foreach (ContactoCliente contacto in cliente.listaContactoCliente.lista)
                               {
                                   //consulta si alguno ha autorizado a enviar un mail
                                   if (contacto.indenvioemail.Equals(Constantes.SI))
                                   {
                                       Usuario email = new Usuario();
                                       email.email = contacto.email;
                                       email.nombresyApellidos = contacto.nombresyApellidos;
                                       listaCorreos.add(email);
                                   }
                               }
                           }
                           //Pregunta si hay que enviarlo a la vendedora y obtiene datos de la vendedora
                           if (correoModuloEnviar.indEnviarUsuario.Equals(Constantes.SI))
                           {
                               Usuario usuarioPrestamo = obtenerUsuario(separacion.usuario);
                               listaCorreos.add(usuarioPrestamo);
                           }
                           //Pregunta si hay que enviarlo a la administración y obtiene datos de la administracion
                           if (correoModuloEnviar.indEnviarAdministrador.Equals(Constantes.SI))
                           {
                               Usuario usuarioConsulta = new Usuario();
                               usuarioConsulta.rol = new Rol();
                               //Rol de Administrador
                               usuarioConsulta.rol.codigo = "1";
                               ListaUsuario listaUsuarioCorreo = listaUsuarioObtenido(usuarioConsulta);

                               foreach (Usuario Administradores in listaUsuarioCorreo.lista)
                               {
                                   listaCorreos.add(Administradores);
                               }
                           }
                           //Pregunta si hay que enviarlo al correo del Usuario principal y obtiene sus datos
                           if (correoModuloEnviar.indEnviarUsuarioPrincipal.Equals(Constantes.SI))
                           {
                               //Usuario principal tiene código 3
                               Usuario email = obtenerUsuario(new Usuario() { codUsuario = "3" });
                               listaCorreos.add(email);
                           }

                           //Prepara email
                           CuerpoMensajeEnviado = CuerpoMensajeEnviado + correoModuloEnviar.textoMensajeAdicional + ListaItem;

                           // Ejecutar envio de mail de notificacion
                           EmailHelper.enviarNotificacion(tituloCorreo, listaCorreos, CuerpoMensajeEnviado);
                       }

                   }
               }

               //Proceso de correo para prestamos que se llevaron
           } //Se cierra la validación del rol administrador
       }*/


    }
}
